$(function() {

	// 验证
	validateInit();

	$('#userTable').bootstrapTable({
		data : getDatas(),
		striped : true, // 是否显示行间隔色
		cache : false, // 是否使用缓存，默认为true，所以一般情况下需要设置一下这个属性（*）
		pagination : true, // 是否显示分页（*）
		sortable : false, // 是否启用排序
		sortOrder : "asc", // 排序方式
		toolbar : "#userToolbar",
		// queryParams: oTableInit.queryParams,//传递参数（*）
		sidePagination : "client", // 分页方式：client客户端分页，server服务端分页（*）
		pageNumber : 1, // 初始化加载第一页，默认第一页
		pageSize : 10, // 每页的记录行数（*）
		pageList : [ 10, 25, 50, 100 ], // 可供选择的每页的行数（*）
		search : true, // 是否显示表格搜索，此搜索是客户端搜索，不会进服务端，所以，个人感觉意义不大
		strictSearch : false,
		showColumns : true, // 是否显示所有的列
		// showRefresh: true, //是否显示刷新按钮
		// minimumCountColumns: 2, //最少允许的列数
		clickToSelect : true, // 是否启用点击选中行
		// height: 500, //行高，如果没有设置height属性，表格自动根据记录条数觉得表格高度
		uniqueId : 'id', // 每一行的唯一标识，一般为主键列
		/*
		 * showToggle:true, //是否显示详细视图和列表视图的切换按钮 cardView: false,
		 */// 是否显示详细视图
		// detailView: false, //是否显示父子表
		columns : [ {
			checkbox : true,
		}, {
			field : 'userId',
			title : 'EHR'
		}, {
			field : 'userName',
			title : '员工姓名'
		}, {
			field : 'userMobile',
			title : '手机号'
		}, {
			field : 'userRoleNames',
			title : '角色'
		}, {
			field : 'createTime',
			title : '创建时间',
			formatter : function(value, row, index) {
				return moment(value).format('YYYY-MM-DD HH:mm:ss');
			}
		}, {
			field : 'operate',
			title : '操作'
		} ],
		onClickRow : function(row, ele, field) {// 单击

		},
		onDblClickRow : function(row) {// 双击审核
			showUserInfo(row);
		},formatLoadingMessage: function(){
		    return "请稍等，正在加载中。。。";
		}
	});

	$("#userTable").bootstrapTable("hideColumn", "id");
	$("#userTable tbody").css("cursor","pointer");
});

function validateInit() {

	// 手机号正则验证
	jQuery.validator
			.addMethod(
					"isMobile",
					function(value, element) {
						var length = value.length;
						var mobile = /^(13[0-9]{9})|(18[0-9]{9})|(14[0-9]{9})|(17[0-9]{9})|(15[0-9]{9})$/;
						return this.optional(element)
								|| (length == 11 && mobile.test(value));
					}, "请输入有效的手机号码");

	$("#addUserForm")
			.validate(
					{
						rules : {
							userId : {
								required : true,
								remote : {
									url : "../user/userCheckRepect.action",
									type : "post",
									data : {
										"userId" : function() {
											return $(
													"#addUserForm [name='userId']")
													.val();
										}
									}
								}
							},
							loginName : {
								required : true,
								remote : {
									url : "../user/userCheckRepect.action",
									type : "post",
									data : {
										"loginName" : function() {
											return $(
													"#addUserForm [name='loginName']")
													.val();
										}
									}
								}
							},
							userName : "required",
							userMobile : {
								required : true,
								digits : true,
								minlength : 11,
								isMobile : true,
								remote : {
									url : "../user/userCheckRepect.action",
									type : "post",
									data : {
										"userMobile" : function() {
											return $(
													"#addUserForm [name='userMobile']")
													.val();
										}
									}
								}
							},
							userEmail : {
								required : true,
								email : true
							},
							userAddress : {
								required : true,
								minlength : 5
							},
							userDesc : {
								required : true,
								minlength : 10
							}

						},
						messages : {
							userId : {
								remote : "此员工id已经存在"
							},
							loginName : {
								remote : "此登录账号已经存在"
							},
							userMobile : {
								digits : "手机号码中不得出现非数字字符",
								minlength : "手机号码不得少于11个数字",
								isMobile : "请输入有效的手机号码",
								remote : "此手机号已经存在"
							}
						},
						success : function(label, element) {// error是lavel标签，element是input标签
							console.log(label[0]);
							labelReset(element);

							var myTipLabel = '<i class="glyphicon glyphicon-ok form-control-feedback my-tip-i"></i>';
							element.parent().append(myTipLabel);
							element.parent().parent().addClass('has-success');
						},
						errorPlacement : function(label, element) {
							console.log(label[0]);
							labelReset(element);

							var myTipLabel = '<i class="glyphicon glyphicon-remove form-control-feedback my-tip-i"></i>'
									+ '<label class="control-label my-tip-label">'
									+ label.text() + '</label>';
							element.addClass("error");
							element.parent().append(myTipLabel);
							element.parent().parent().addClass('has-error');
						}
					});
}

function getDatas() {
	var users;
	$.ajax({
				url : "../user/query.action",
				type : "post",
				async : false,
				data : {
					"userStatus" : "1"
				},
				success : function(data) {
					$(data)
							.each(
									function() {
										// 获取此人的角色
										this.userRoleNames = getUserRoleNames(this.id);

										// 操作
										this.operate = '<button class=\'btn btn-primary btn-xs\' onclick=\'roleLicense('
												+ this.id
												+ ')\'>角色授权</button>&nbsp;'
												+ '<button class=\'btn btn-primary btn-xs\' onclick=\'resetUserPassword('
												+ this.id
												+ ')\'>重置密码</button>&nbsp;'
												+ '<button class=\'btn btn-danger btn-xs\' onclick=\'forbidden('
												+ this.id + ')\'>禁用</button>';
									});
					users = data;
				},
				error : function() {
					toastr.error("获取员工信息出错，请联系管理员");
				}
			});
	return users;
}

// 新增员工
function addUser() {
	formReset("#addUserForm");

	// 角色信息获取
	$('#addUserForm #chosen-select').chosen({
		width : "100%",
		no_results_text : "没有找到",
		search_contains : true
	// 默认从头匹配
	});
	$("#addUserForm #chosen-select").chosen("destroy");

	// 请求所有的角色
	$.ajax({
		url : "../role/getAllRoles.action",
		type : "post",
		success : function(data) {
			// console.log(data);
			if (data.length == 0) {
				toastr.info("数据库中没有角色记录，请先添加角色");
			} else {
				var options = '';
				$(data).each(
						function() {
							options += '<option value=' + this.id + '>'
									+ this.roleName + '</option>';
						});
				$("#addUserForm [name='roleIds']").html(options);
				// 初始化chosen
				$('#addUserForm #chosen-select').chosen({
					width : "100%",
					no_results_text : "没有找到",
					search_contains : true
				// 默认从头匹配
				});
				$("#addUserModal").modal("show");
			}
		},
		error : function() {
			toastr.error("获取角色信息发生错误，请联系管理员");
		}
	});
}

// 员工EHR编号效验
function userIdCheckRepect(userId) {
	// alert(userId);
	$.ajax({
		url : "../user/userCheckRepect.action",
		type : "post",
		data : {
			"userId" : userId
		},
		success : function(data) {
			if (data.success == "true") {
				// 合法
			} else {
				// 编号已经存在
				toastr.error(userId + "编号已经存在，请检查修改");
			}
		},
		error : function() {
			toastr.error("效验EHR编号是否唯一请求发生错误，请联系管理员");
		}
	});
}

// 角色授权
function roleLicense(userId) {
	// console.log(userId);
	// 表单还原
	$('#roleLicenseForm #chosen-select').chosen({
		width : "100%",
		no_results_text : "没有找到",
		allow_single_deselect : true
	});
	$("#roleLicenseForm #chosen-select").chosen("destroy");

	// 请求所有的角色
	$("#roleLicenseForm")[0].reset();
	$.ajax({
		url : "../role/getAllRoles.action",
		type : "post",
		success : function(data) {
			// console.log(data);
			if (data.length == 0) {
				toastr.info("数据库中没有角色记录，请先添加角色");
			} else {
				var options = '';
				var userRoleIds = getUserRoleIds(userId);
				$(data).each(
						function() {
							if (userRoleIds.indexOf(this.id) != -1) {
								options += '<option selected="selected" value='
										+ this.id + '>' + this.roleName
										+ '</option>';
							} else {
								options += '<option value=' + this.id + '>'
										+ this.roleName + '</option>';
							}
						});
				// console.log(options);
				$("#roleLicenseModal [name='roleIds']").html(options);
				// 初始化chosen
				$('#roleLicenseForm #chosen-select').chosen({
					width : "100%",
					no_results_text : "没有找到",
					search_contains : true
				// 默认从头匹配
				});
				$("#roleLicenseModal [name='userId'").val(userId);
				$("#roleLicenseModal").modal("show");
			}
		},
		error : function() {
			toastr.error("获取角色信息发生错误，请联系管理员");
		}
	});

}

// 用户角色授权保存
function roleLicenseSave() {
	var roles = $('#roleLicenseForm #chosen-select').val();
	if (isNull(roles)) {
		toastr.error("请必须选择一个角色，如有需要，请直接禁用该员工")
	} else {

		$.ajax({
			url : "../userRole/save.action",
			type : "post",
			data : $("#roleLicenseForm").serialize(),
			success : function(data) {
				// console.log(data);
				if (data.success == "true") {
					toastr.success("保存成功");
					$("#userTable").bootstrapTable("load", getDatas());
				} else {
					toastr.error("服务器内部发生错误，请联系管理员");
				}
			},
			error : function(data) {
				toastr.error("保存用户角色失败，请联系管理员");
			}
		});
		$("#roleLicenseModal").modal("hide");
	}

}

// 新增员工提交
function addUserSave() {

	if (!$("#addUserForm").valid()) {
		return false;
	}

	// 角色是否填写
	var roles = $('#addUserForm #chosen-select').val();
	if (isNull(roles)) {
		toastr.error("请至少选择一个角色");
	} else {
		$.ajax({
			url : "../user/save.action",
			type : "post",
			data : $("#addUserForm").serialize(),
			success : function(data) {
				if (data.success == "true") {
					toastr.success("保存成功");
					$('#userTable').bootstrapTable("load", getDatas());
				} else {
					toastr.error("提交数据库发生错误，请联系管理员");
				}
			},
			error : function() {
				toastr.error("提交后台发生错误，请联系管理员");
			}
		});

		$("#addUserModal").modal("hide");
	}

}

// 重置密码
function resetUserPassword(id) {

	swal({
		title : "您确定要重置此员工的密码吗",
		text : "重置后密码为123456，密码过期时间是90天后",
		type : "warning",
		showCancelButton : true,
		confirmButtonColor : "#DD6B55",
		confirmButtonText : "重置",
		closeOnConfirm : false
	}, function() {
		$.ajax({
			url : "../user/update.action",
			type : "post",
			data : {
				"id" : id,
				"userPassword" : "123456",
				"passwordType" : "1"
			},
			success : function(data) {
				if (data.success == "true") {
					swal("重置成功", "该员工的密码已经重置为123456", "success");
					$("#userTable").bootstrapTable("load", getDatas());
				} else {
					swal("操作失败", "提交到发生错误，请联系管理员", "error");
				}
			},
			error : function() {
				swal("操作失败", "提交到后台错误，请联系管理员。", "error");
			}
		});
	});
}

function forbidden(id) {

	swal({
		title : "您确定要禁用此员工吗",
		text : "禁用后此员工将无法登录系统",
		type : "warning",
		showCancelButton : true,
		confirmButtonColor : "#DD6B55",
		confirmButtonText : "禁用",
		closeOnConfirm : false
	}, function() {
		$.ajax({
			url : "../user/update.action",
			type : "post",
			data : {
				"id" : id,
				"userStatus" : "0"
			},
			success : function(data) {
				if (data.success == "true") {
					swal("禁用成功", "该员工已经成功禁用", "success");
					$("#userTable").bootstrapTable("load", getDatas());
				} else {
					swal("操作失败", "提交到发生错误，请联系管理员", "error");
				}
			},
			error : function() {
				swal("操作失败", "提交到后台错误，请联系管理员。", "error");
			}
		});
	});
}

function removeForbidden() {
	window.location.href = "../user/removeForbidden.action";
}

// 批量删除
function batchDelete() {
	var selectedUsers = $("#userTable").bootstrapTable('getSelections');
	// console.log(JSON.stringify(selectedRoles)); //Array[Object, Object, ...]
	// return;
	if (selectedUsers.length == 0) {
		toastr.error("请勾选你要删除的数据");
		return false;
	}
	var userIds = new Array();
	$(selectedUsers).each(function(index, user) {
		userIds[index] = user.id;
	})

	swal({
		title : "您确定要禁用所选员工吗",
		text : "禁用后的员工将无法登录系统",
		type : "warning",
		showCancelButton : true,
		confirmButtonColor : "#DD6B55",
		confirmButtonText : "禁用",
		closeOnConfirm : false
	}, function() {
		$.ajax({
			url : "../user/batchDelete.action",
			type : "post",
			data : {
				"userIds" : userIds
			},
			success : function(data) {
				if (data.success == "true") {
					swal("禁用成功", "所选员工已经成功禁用", "success");
					$("#userTable").bootstrapTable("load", getDatas());
				} else {
					swal("删除失败", "后台业务处理发生错误，请联系管理员", "error");
				}
			},
			error : function() {
				swal("操作失败", "提交到数据库发生错误，请联系管理员。", "error");
			}
		});
	});

}
function showUserInfo(user) {
	var userDetailHtml = '<p style="text-align: center; color: #6294AD;"><b>基本信息</b></p>'
					+	'<p>员工编号：' + user.userId + '</p>'
					+	'<p>登录名：' + user.loginName + '</p>'
					+	'<p>姓名：' + user.userName + '</p>'
					+	'<p>性别：' + getSexName(user.userSex) + '</p>'
					+	'<p>手机号：' + user.userMobile + '</p>'
					+	'<p>邮箱：' + user.userEmail + '</p>'
					+	 '<hr/><p style="text-align: center; color: #6294AD;"><b>角色信息</b></p>';
	$.ajax({
		url: "../userRole/getUserRoles.action",
		type: "post",
		async: false,
		data: {"userId":user.id},
		success: function (data) {
			$(data).each(function(){
			
				userDetailHtml+= '<p>被授权角色：' + getRoleNamebyId(this.roleId) + ''
					+			 '	授权人：' + getUserNameById(this.createUserId) + ''
					+			 '	授权时间：' + getDefaultTime(this.createTime) + '</p>';
			});
		},
		error: function() {
			toastr.error("获取员工角色信息出错，请联系管理员");
		}
	});
	userDetailHtml 	+= '<hr/><p style="text-align: center; color: #6294AD;"><b>详细信息</b></p>'
		
					+	'<p>住址：' + user.userAddress + '</p>'
					+	'<p>自我简介：' + user.userDesc + '</p>'
					+	'<p>创建人：' + getUserNameById(user.createUserId) + '</p>'
					+	'<p>创建时间：' + getDefaultTime(user.createTime) + '</p>'
					+	'<p>是否禁用：' + getUserStatusInfo(user.userStatus) + '</p>'
	
	userDetailHtml	+= '<hr/><p style="text-align: center; color: #6294AD;"><b>登录信息</b></p>'
					+	'<p>最近登录时间：' + getDefaultTime(user.lastLoginTime) + '</p>'
					+	'<p>密码到期时间：' + getDefaultTime(user.passwordExpire) + '</p>'
					+	'<p>是否临时密码：' + getPasswordTypeName(user.passwordType) + '</p>'
					+	'<p>登录次数：' + user.loginCount + '</p>'
					+	'<p>最近登录失败时间：' + getDefaultTime(user.lastLoginFailedTime) + '</p>'
					+	'<p>登录失败次数：' + user.loginFailedCount + '</p>';
	
	$("#userDetailShow").html(userDetailHtml);
	$("#userDetailModal").modal("show");
}

function roleInfo() {
	var selectedUsers = $("#userTable").bootstrapTable('getSelections');
	// console.log(JSON.stringify(selectedRoles)); //Array[Object, Object, ...]
	// return;
	if (selectedUsers.length == 0) {
		toastr.error("请至少选择一个你想要查看角色详情的员工");
		return false;
	}
	if (selectedUsers.length > 1) {
		toastr.error("为了方便角色详情的展示，系统仅支持一次查看一个员工的角色详情");
		return false;
	}
	
	var userInfo	= "角色详情"
					+	'<table class="table table-bordered">'
					+		'<tr>'
					+			'<td>被授权员工</td>'
					+			'<td>被授权角色</td>'
					+			'<td>授权人</td>'
					+			'<td>授权时间</td>'
					+		'</tr>';
	var isIllegal = false;
	$.ajax({
		url: "../userRole/getUserRoles.action",
		type: "post",
		async: false,
		data: {"userId":selectedUsers[0].id},
		success: function (data) {
			$(data).each(function(){
			
				userInfo+=	'<tr>'
					+			'<td>' + selectedUsers[0].userName + '</td>'
					+			'<td>' + getRoleNamebyId(this.roleId) + '</td>'
					+			'<td>' + getUserNameById(this.createUserId) + '</td>'
					+			'<td>' + getDefaultTime(this.createTime) + '</td>'
					+		'</tr>'
			});
			userInfo+=	'</table>';
			isIllegal = true;
		},
		error: function() {
			toastr.error("获取员工角色信息出错，请联系管理员");
		}
	});
	if (isIllegal) {
		
		toastr.options = {
				"closeButton" : true, // 是否显示关闭按钮
				"positionClass" : "toast-bottom-full-width",
				"timeOut" : "8000"
		};
		toastr.info(userInfo);
		toastr.options = {
				"positionClass" : "toast-top-right",
				"timeOut" : "5000"
		};
	}
}

/**
 * 是否临时密码
 * @param type
 */
function getPasswordTypeName(type) {
	if (type == "0" || type == 0 || type == false) {
		return "否";
	}
	return "是";
}
/**
 * 是否已经用
 * @param status
 */
function getUserStatusInfo(status) {
	if (status == "0" || status == 0 || status == false) {
		return "是";
	}
	return "否";
}

